package org.resort.dao;

import org.apache.ibatis.annotations.Param;
import org.resort.entity.Privilege;
import org.resort.entity.RolePrivilege;

import java.util.List;

/**
 * @Author 郭文虎
 */
public interface PrivilegeDao extends CommonDao<Privilege> {
    /**
     * 根据父权限编号获取父权限对象
     *
     * @param id 父权限编号
     * @return 父权限对象
     */
    Privilege getParentById(@Param("id") int id);

    /**
     * 根据父权限编号获取对应的子权限
     *
     * @param parentId 父权限编号
     * @return 对应的子权限集合
     */
    List<Privilege> getPartEntityByParentId(@Param("parentId") int parentId);

    /**
     * 获取全部父权限
     *
     * @return 父权限集合
     */
    List<Privilege> getAllParentPrivilege();

    /**
     * 根据父权限分页获取子权限及当前父权限
     *
     * @param offset   偏移量
     * @param limit    每页显示条数
     * @param parentId 父权限编号
     * @return 对应的子权限和当前父权限
     */
    List<Privilege> getPartPrivilegeByPageAndParentId(@Param("offset") int offset, @Param("limit") int limit, @Param("parentId") int parentId);


    /**
     * 根据父权限编号统计有多少条对应的子权限
     *
     * @param parentId 父权限编号
     * @return 满足条件的总条数
     */
    int countPartPrivilegeByParentId(@Param("parentId") int parentId);



    /**
     * 获取所有未拥有的父权限
     * @param rolePrivilegeList 已拥有的权限集合
     * @return 未拥有的父权限集合
     */
    List<Integer> getPartNotParentPrivilegeByRolePrivilege(List<RolePrivilege> rolePrivilegeList);

    /**
     * 获取所未拥有的子权限
     * @param rolePrivilegeList 已拥有的权限集合
     * @return 未拥有的子权限集合
     */
    List<Privilege> getPartNotChildrenPrivilegeByRolePrivilege(List<RolePrivilege> rolePrivilegeList);
}
